From: Keir Fraser Date: Wed, 15 Dec 2010 10:49:57 +0000 (+0000) Subject: x86: Define a new function gtsc_to_gtime() X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22%22/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22%22?a=commitdiff_plain;h=e9a67fa1885580368fb00de24678671692095d80;p=xen.git x86: Define a new function gtsc_to_gtime() Define it to do the transform from guest tsc to guest time. Fix the typo in gtime_to_gtsc() definition. Signed-off-by: Wei Gang --- diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c index d57a9cb518..0be33d97e2 100644 --- a/xen/arch/x86/time.c +++ b/xen/arch/x86/time.c @@ -1634,11 +1634,20 @@ static void __init tsc_parse(const char *s) } custom_param("tsc", tsc_parse); -u64 gtime_to_gtsc(struct domain *d, u64 tsc) +u64 gtime_to_gtsc(struct domain *d, u64 time) { if ( !is_hvm_domain(d) ) - tsc = max_t(s64, tsc - d->arch.vtsc_offset, 0); - return scale_delta(tsc, &d->arch.ns_to_vtsc); + time = max_t(s64, time - d->arch.vtsc_offset, 0); + return scale_delta(time, &d->arch.ns_to_vtsc); +} + +u64 gtsc_to_gtime(struct domain *d, u64 tsc) +{ + u64 time = scale_delta(tsc, &d->arch.vtsc_to_ns); + + if ( !is_hvm_domain(d) ) + time += d->arch.vtsc_offset; + return time; } void pv_soft_rdtsc(struct vcpu *v, struct cpu_user_regs *regs, int rdtscp) diff --git a/xen/include/asm-x86/time.h b/xen/include/asm-x86/time.h index 52f21dd4e9..fa8236d5d6 100644 --- a/xen/include/asm-x86/time.h +++ b/xen/include/asm-x86/time.h @@ -59,7 +59,8 @@ uint64_t ns_to_acpi_pm_tick(uint64_t ns); uint64_t tsc_ticks2ns(uint64_t ticks); void pv_soft_rdtsc(struct vcpu *v, struct cpu_user_regs *regs, int rdtscp); -u64 gtime_to_gtsc(struct domain *d, u64 tsc); +u64 gtime_to_gtsc(struct domain *d, u64 time); +u64 gtsc_to_gtime(struct domain *d, u64 tsc); void tsc_set_info(struct domain *d, uint32_t tsc_mode, uint64_t elapsed_nsec, uint32_t gtsc_khz, uint32_t incarnation);